Pada AWS apakah saya harus membuka port di firewall instance EC2 dan juga grup keamanan?

8

Jika saya mengubah port SSH saya dari 22 ke 23453, saya tidak bisa lagi ssh in.

Secara lebih rinci, saya menggunakan contoh Red Hat EC2 di Amazon Web Services. Ini adalah perubahan kedua yang telah saya instal baru (perubahan pertama adalah menambahkan pengguna non-root).

Saya dapat ssh di baik menggunakan Git Bash dan file .ssh / config lokal, saya mengedit baris di / etc / ssh / sshd_config yang saat ini mengatakan

#Port 23453

untuk mengatakan

Port 23453

kemudian mulai kembali sshd dengan

sudo service sshd restart

Saya kemudian menambahkan baris "Port 23453" file .ssh / config saya

Host foo 
Hostname my-ec2-public-DNS
Port 23453
IdentityFile my ssl key

Jika saya membuka shell Git Bash lain (tanpa menutup koneksi saya yang ada) dan mencoba ssh ke instance saya (dengan ssh foo) saya melihat kesalahan berikut:

ssh: connect to host my-ec2-public-DNS port 23453: Bad file number

Grup keamanan yang terlampir pada instance ini memiliki dua entri, keduanya TCP

22 (SSH) 0.0.0.0/0

23453 0.0.0.0/0

Tebakan terbaik saya adalah bahwa port tersebut masih diblokir oleh firewall saya.

Outputnya sudo iptables -Ladalah sebagai berikut

Chain INPUT (policy ACCEPT)
target     prot opt source               destination
ACCEPT     all  --  anywhere             anywhere            state RELATED,ESTABLISHED
ACCEPT     icmp --  anywhere             anywhere
ACCEPT     all  --  anywhere             anywhere
ACCEPT     tcp  --  anywhere             anywhere            state NEW tcp dpt:ssh
REJECT     all  --  anywhere             anywhere            reject-with icmp-host-prohibited

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination
REJECT     all  --  anywhere             anywhere            reject-with icmp-host-prohibited

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination

Yang terlihat cukup terbuka bagiku.

MEMPERBARUI

Setelah menambahkan aturan iptables

iptables -A INPUT -p tcp --dport 23453 -j ACCEPT

dan mencoba lagi, masih belum berhasil.

Output dari iptables -L

Chain INPUT (policy ACCEPT)
target     prot opt source               destination
ACCEPT     all  --  anywhere             anywhere            state RELATED,ESTABLISHED
ACCEPT     icmp --  anywhere             anywhere
ACCEPT     all  --  anywhere             anywhere
ACCEPT     tcp  --  anywhere             anywhere            state NEW tcp dpt:ssh
REJECT     all  --  anywhere             anywhere            reject-with icmp-host-prohibited
ACCEPT     tcp  --  anywhere             anywhere            tcp dpt:23453

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination
REJECT     all  --  anywhere             anywhere            reject-with icmp-host-prohibited

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination

Yang terlihat cukup terbuka. Saya tidak sepenuhnya yakin bagaimana mencari paket yang masuk atau aktivitas di pelabuhan. Tetapi output dari netstat -ntlp(sebagai root)

Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address               Foreign Address             State PID/Program name
tcp        0      0 0.0.0.0:56137               0.0.0.0:*                   LISTEN      948/rpc.statd
tcp        0      0 0.0.0.0:111                 0.0.0.0:*                   LISTEN      930/rpcbind
tcp        0      0 127.0.0.1:631               0.0.0.0:*                   LISTEN      1012/cupsd
tcp        0      0 127.0.0.1:25                0.0.0.0:*                   LISTEN      1224/master
tcp        0      0 0.0.0.0:23453               0.0.0.0:*                   LISTEN      32638/sshd
tcp        0      0 :::36139                    :::*                        LISTEN      948/rpc.statd
tcp        0      0 :::111                      :::*                        LISTEN      930/rpcbind
tcp        0      0 ::1:631                     :::*                        LISTEN      1012/cupsd
tcp        0      0 :::23453                    :::*                        LISTEN      32638/sshd

Yang menurut saya menunjukkan sshd pada 23453.

Saya telah memeriksa lagi bahwa instance memiliki port terbuka di grup keamanan (Port: 23453, Protokol: tcp, Sumber: 0.0.0.0/0)

Apa lagi yang bisa menyebabkan kegagalan untuk terhubung melalui SSH?

Bersulang

POSTMORTEM

Saya sekarang dapat terhubung. Itu aturan yang hilang di iptables. Output dari iptables -Lsekarang terlihat seperti ini:

Chain INPUT (policy ACCEPT)
target     prot opt source               destination
ACCEPT     all  --  anywhere             anywhere            state RELATED,ESTABLISHED
ACCEPT     icmp --  anywhere             anywhere
ACCEPT     tcp  --  anywhere             anywhere            tcp dpt:23453 state NEW
ACCEPT     all  --  anywhere             anywhere
ACCEPT     tcp  --  anywhere             anywhere            state NEW tcp dpt:ssh
REJECT     all  --  anywhere             anywhere            reject-with icmp-host-prohibited

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination
REJECT     all  --  anywhere             anywhere            reject-with icmp-host-prohibited

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination
Andrew Martin
sumber
Bagi siapa saja yang tidak dapat melihat perbedaan antara yang ketiga iptables -L(ssh berfungsi) dan yang kedua iptables -L(ssh diblokir). Lihatlah urutan aturan dalam rantai INPUT (6 baris di bawah "target" pertama), mereka dibaca dari atas ke bawah, jadi di set aturan kedua, "TOLAKKAN semua" dipukul sebelum "ACCEPT tcp dpt: 23453 ". Set ketiga aturan memiliki entri MENERIMA di atas, dan karenanya sebelumnya, entri MENOLAK.
Andrew Martin

Jawaban:

12

Firewall contoh Anda tidak memiliki port ini terbuka. Coba perintah berikut:

iptables -I INPUT 3 -s 0.0.0.0/0 -d 0.0.0.0/0 -p tcp --dport 23453 -m state --state New -j ACCEPT

Perhatikan bahwa aturan iptables perlu disimpan agar tetap ada setelah reboot. Di RHEL itu:

/sbin/service iptables save
melsayed
sumber
Ini berhasil. Jika seseorang bisa memberi tahu saya perbedaan penting antara aturan iptables @ melsayed dan aturan iptables Frank, saya akan sangat berterima kasih. Juga, saya kira ini berarti jawaban untuk pertanyaan pamungkas saya adalah "Ya, di AWS Anda harus membuka port di firewall contoh EC2 serta grup keamanan mereka". Terimakasih semuanya.
Andrew Martin
Saya mencoba mengomentari jawaban Frank tapi saya belum punya cukup tenaga :)
melsayed
2
Pada dasarnya, perintah iptables Frank menambahkan (-A) aturan baru yang memungkinkan koneksi ke port tersebut. Masalahnya adalah, ia menambahkan aturan di akhir daftar aturan iptables. Aturan terakhir dalam daftar iptables menolak apa pun yang tidak diizinkan secara eksplisit sebelumnya. Karena aturan iptables diterapkan secara berurutan, koneksi dicocokkan dan ditolak bahkan sebelum sampai ke aturan baru.
melsayed
2
Saya memasukkan aturan baru dalam daftar, di posisi ke-3 (-I INPUT 3). Yang cocok sebelum aturan tolak di akhir, maka memungkinkan koneksi. Seperti yang disebutkan Frank, Anda bisa menggunakan iptables -nvL untuk melihat jumlah paket yang cocok dengan setiap aturan, yang membantu saat men-debug konfigurasi seperti itu.
melsayed
/sbin/service iptables savetidak bekerja untuk saya, bahkan dengan sudo.
huertanix
2

Tambahkan aturan iptables

iptables -I INPUT 1 -p tcp --dport 23435 -j ACCEPT

yang menerima lalu lintas dari host mana pun, dengan port 23435, dan mencoba ssh, jika Anda melihat paket atau aktivitas apa pun, maka itu berarti bahwa paket tersebut mencapai server Anda.

Jika Anda tidak melihat paket, itu berarti bahwa grup AWS Security tidak memiliki aturan untuk mengizinkan port Anda.

tetapi jika Anda melihat lalu lintas pada aturan ini (oleh iptables -nvL), maka Anda harus menjalankan "netstat -ntlp" dan memverifikasi apakah daemon SSH berjalan pada port 2435. dan seterusnya 0.0.0.0/0.

semoga langkah-langkah ini akan menyelesaikan masalah. jika masih tidak ada, maka beri tahu saya.

Farhan
sumber
1

Apakah Anda yakin grup keamanan diatur dengan benar? Apakah Anda mengklik "Terapkan perubahan"? Banyak orang lupa untuk benar-benar menerapkan perubahan mereka :)

"Nomor file buruk" biasanya menandakan waktu habis koneksi, dan pengaturan iptables Anda terlihat benar.

Waleed Hamra
sumber
Saya jatuh ke perangkap "menerapkan perubahan" sekali sebelumnya. Tidak akan lagi. :)
Andrew Martin
-1

Jika ada yang menemukan topik ini karena mereka mengubah port default ssh, berikut ini adalah solusi yang sesuai untuk saya:

  1. Untuk mem-bypass firewall perusahaan, saya mengubah port ke 80 /etc/ssh/sshd_conf.
  2. Sayangnya, Apache sudah diinstal pada contoh itu sehingga saya tidak bisa ssh lagi.
  3. Saya melepaskan volume dari instance.
  4. melampirkannya ke contoh lain
  5. memasangnya, mengubah port dalam file konfigurasi
  6. melepaskannya, terpasang kembali pada contoh lama
  7. reboot: semua baik: D
Homezar
sumber