Я учусь пользоваться iptables
и пишу очень простой брандмауэр в Ubuntu.
Используя только таблицу фильтров , я добавил следующие правила
iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP
, поскольку хочу пропустить только те пакеты, которые мне нужны.
Затем я попытался добавить правила для создания простых HTTP-соединений, поэтому для первой попытки я добавил
iptables -A INPUT -p tcp -j ACCEPT
iptables -A INPUT -p udp --sport 53 -j ACCEPT
первую строку для приема всего трафика TCP, а вторую - для приема ответов DNS. .
Аналогично, для цепочки OUTPUT я добавил
iptables -A OUTPUT -p tcp -j ACCEPT
iptables -A OUTPUT -p udp --dport 53 -j ACCEPT
Но когда я пытаюсь использовать lynx
, соединение не происходит.
Я думаю, что единственной проблемой является DNS, так как весь трафик TCP принимается. Но пакеты в / из порта 53 могут проходить через брандмауэр ... так в чем же проблема?
Я добавил следующие два правила, и теперь это работает.
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT
и используя Wireshark, я понял, что DNS-запросы также поступают в / из петлевого интерфейса. Я никогда не думал, что ... почему?
Просто используйте iptables-save
и перезагрузите компьютер. Это заставит ваши настройки iptables работать.
Если вы настраиваете брандмауэр, то почему вы включаете все порты TCP. Я бы предпочел разрешить только выбранные порты. т.е. для рыси. Я бы использовал:
sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables-save
sudo init 6
Также, почему вы используете
sudo iptables -A OUTPUT -j DROP
Это отбросит весь ваш исходящий трафик со всех портов.